package com.ming.learn.from.carl.string;

import static com.ming.commons.utils.MyStringUtils.reverse;

/*
题目：剑指Offer58-II.左旋转字符串
 */
public class Of20201227Offer58 {
    /*
    字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
    请定义一个函数实现字符串左旋转操作的功能。
    比如，输入字符串"abcdefg"和数字2，该函数将返回左旋转两位得到的结果"cdefgab"。
    示例 1：
    输入: s = "abcdefg", k = 2
    输出: "cdefgab"
    示例 2：
    输入: s = "lrloseumgh", k = 6
    输出: "umghlrlose"
      限制：
    1 <= k < s.length <= 10000
     */
    public static void main(String[] args) {
        System.out.println(reverseLeftWords("abcdef", 2));
    }

    /*
    思路：类比 LeetCode151
    1. 反转区间为前n的子串
    2. 反转区间为n到末尾的子串
    3. 反转整个字符串
     */
    private static String reverseLeftWords(String s, int n) {
        s = reverse(s, 0, n - 1);
        s = reverse(s, n, s.length() - 1);
        s = reverse(s, 0, s.length() - 1);
        return s;
    }

}
